package cn.doit.day03

object _04_特质 {
  def main(args: Array[String]): Unit = {
    val bird: Bird = new Bird



    //特质得动态混入，主要是针对某一个对象而言得，可能某一个对象单独拥有某种能力
    //那么，我们就可以针对这个对象单独去实现某个特质来赋予他这种能力
    val teXunBird: Bird with CanSongWM= new Bird with CanSongWM {
      override def canDrive(): Unit = println("10年老司机，从不出车祸")
    }

    teXunBird.canDrive()
  }
}

//特质也是多实现，第一个实现得特质需要用extends，后面得都用的是with
//scala中得特质还拥有动态混入得能力(主要是针对对象的)
trait CanFly{
  //scala特质里面 啥都可以定义
  val id:Int = 10
  val name :String
  def add(a:Int,b:Int)
  def plus(a:Int,b:Int)={
    a+b
  }
}

trait CanEat{
  //scala特质里面 啥都可以定义
  def eat(a:Int,b:Int)
}

trait CanSongWM{
  def songWm()={
    println("你就说送到哪吧")
  }

  def canDrive()
}

//继承用的是extends  但是接口中得第一个也是用的extends
class Bird extends CanFly with CanEat {
  override val name: String = "小小鸟"

  override def add(a: Int, b: Int): Unit = println(a+b)

  override def eat(a: Int, b: Int): Unit = println("我会吃")
}
